package org.jeecg.modules.networking.service;

import com.alibaba.fastjson.JSONObject;
import org.bouncycastle.crypto.InvalidCipherTextException;
import org.jeecg.modules.carInformationUpload.entity.CarInformationUpload;
import org.jeecg.modules.carRegister.entity.CarRegister;
import org.jeecg.modules.inPlantUpload.entity.InPlantUpload;
import org.jeecg.modules.noRoadUpload.entity.NoRoadUpload;

import java.io.IOException;
import java.util.Date;

public interface INetWorkingService {

    String getToken();

    String getPublicKey();

    /**
     * 8.2信息同步接口
     * 功能描述：企业门禁及视频监控系统需每隔1分钟向市级监管平台发送信息同步
     * 请求，告知联网在线状态，同时市级监管平台会下发不同的信息码（详见表2）提
     * 醒企业门禁及视频监控系统及时更新移动源管控措施、违规通行车辆名单、黑名单
     * 车辆等信息。
     * @return
     */
    JSONObject syncInfo();

    /**
     * 8.3 上报车辆备案信息接口
     * 功能描述：企业上传采集的运输车辆详细信息至市级监管平台，包括车牌号、车
     * 辆类型、VIN、发动机号码、行驶证等备案信息，也包括车辆排放阶段、随车清单等环
     * 保信息。
     * @return
     */
    JSONObject putRegisterVehicleInfo(CarRegister carRegister) throws InvalidCipherTextException, IOException;

    /**
     * 8.4 上报车辆通行记录信息接口
     * 功能描述：车牌识别摄像机识别到车牌信息并且车辆完成过闸过程后，需实时上
     * 传车辆进出流水号、出入口编号、道闸编号、车牌号、车辆颜色等信息至市级监管平
     * 台。上传车辆通行记录前需先上传车辆备案信息（详见8.2），若已上传则无需重复上
     * 传，若未上传则上报车辆通行记录时接口返回“未上传车辆备案”信息提示，根据提
     * 示需及时上传车辆备案信息。若由于网络原因或者其他因素造成通行记录未及时上传，
     * 使用此接口补传并在数据说明中填写原因。
     * @return
     * @throws InvalidCipherTextException
     * @throws IOException
     */
    JSONObject putVehiclePassRecords(CarInformationUpload carInformationUpload) throws InvalidCipherTextException, IOException;

    /**
     * 8.5 上报厂内运输车辆信息接口
     * 功能描述：上报厂内运输车辆环保登记编码、车辆识别码（VIN）、生产日期、车
     * 牌号码等信息至市级监管平台。
     * @return
     * @throws InvalidCipherTextException
     * @throws IOException
     */
    JSONObject putVehicleInfo(InPlantUpload inPlantUpload) throws InvalidCipherTextException, IOException;

    /**
     * 8.6 上报非道路移动机械信息接口
     * 功能描述：上报非道路移动机械环保登记编码、机械环保代码/产品识别码
     * （PIN）、机械生产日期、车牌号码等信息至市级监管平台。
     * @return
     * @throws InvalidCipherTextException
     * @throws IOException
     */
    JSONObject putRegisterNRMM(NoRoadUpload noRoadUpload) throws InvalidCipherTextException, IOException;

    /**
     * 8.7 上报排放超标信息核实结果接口
     * 功能描述：上报车辆排放超标信息核查结果，并注明核查方法。
     * @return
     * @throws InvalidCipherTextException
     */
    JSONObject putVehicleCheckResult() throws InvalidCipherTextException;

    /**
     * 8.8 上报每日运输车辆进厂台次总数接口
     * 功能描述：企业须在每日1时前向市级监管平台上报前一日24小时范围内运输车
     * 辆进厂台次总数。
     * @return
     * @throws InvalidCipherTextException
     */
    JSONObject putVehiclePassRecordsNum(Date day, int recordsNumber) throws InvalidCipherTextException;

    /**
     * 8.9 违规通行车辆名单查询接口
     * 功能描述：查询生态环境主管部门认定的违规通行车辆信息。
     * @return
     */
    JSONObject breakPassRules();

    /**
     * 8.10 黑名单车辆查询接口
     * 功能描述：查询生态环境主管部门认定或解除的黑名单车辆信息。
     * @return
     */
    JSONObject breakEnvRules();

    /**
     * 8.11 移动源管控措施查询接口
     * 功能描述：查询市级监管系统按照重污染天气应急预案响应级别、行业类型制
     * 订的“一企一策”的车辆（机械） 管控措施。
     * @return
     */
    JSONObject getControlStrategy();

    JSONObject updateLocalTokenInfo();

}
